// import com.alibaba.druid.DbType;
// import com.alibaba.druid.sql.SQLUtils;
// import com.alibaba.druid.sql.ast.SQLExpr;
// import com.alibaba.druid.sql.ast.SQLName_ptr;
// import com.alibaba.druid.sql.ast.SQLObject;
// import com.alibaba.druid.sql.ast.SQLStatementImpl;
// import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr;
// import com.alibaba.druid.sql.ast.expr.SQLLiteralExpr_ptr;
// import com.alibaba.druid.sql.ast.expr.SQLPropertyExpr;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;

// import java.util.ArrayList;
// import java.util.List;
#pragma once
#include "../SQLStatementImpl.h"
#include "SQLCreateStatement.h"

class SQLAlterViewStatement : virtual public SQLStatementImpl, virtual public SQLCreateStatement
{
public:
  BOOL_ptr force;
  // SQLName_ptr   name;
  SQLSelect_ptr subQuery;
  BOOL_ptr ifNotExists;

  string_ptr algorithm;
  SQLName_ptr definer;
  string_ptr sqlSecurity;

  SQLExprTableSource_ptr tableSource;

  SQLTableElement_list_ptr columns;

  BOOL_ptr withCheckOption;
  BOOL_ptr withCascaded;
  BOOL_ptr withLocal;
  BOOL_ptr withReadOnly;

  SQLLiteralExpr_ptr comment;

  SQLAlterViewStatement();

  SQLAlterViewStatement(DbType_ptr dbType);
  SHAREDOBJECT(SQLAlterViewStatement);

  string_ptr computeName();

  string_ptr getSchema();

  SQLName_ptr getName();

  void setName(SQLName_ptr name);

  void setName(string_ptr name);

  SQLExprTableSource_ptr getTableSource();

  void setTableSource(SQLExprTableSource_ptr tableSource);

  BOOL_ptr isWithCheckOption();

  void setWithCheckOption(BOOL_ptr withCheckOption);

  BOOL_ptr isWithCascaded();

  void setWithCascaded(BOOL_ptr withCascaded);

  BOOL_ptr isWithLocal();

  void setWithLocal(BOOL_ptr withLocal);

  BOOL_ptr isWithReadOnly();

  void setWithReadOnly(BOOL_ptr withReadOnly);

  SQLSelect_ptr getSubQuery();

  void setSubQuery(SQLSelect_ptr subQuery);

  SQLTableElement_list_ptr getColumns();

  void addColumn(SQLTableElement_ptr column);

  BOOL_ptr isIfNotExists();

  void setIfNotExists(BOOL_ptr ifNotExists);

  SQLLiteralExpr_ptr getComment();

  void setComment(SQLLiteralExpr_ptr comment);

  string_ptr getAlgorithm();

  void setAlgorithm(string_ptr algorithm);

  SQLName_ptr getDefiner();

  void setDefiner(SQLName_ptr definer);

  string_ptr getSqlSecurity();

  void setSqlSecurity(string_ptr sqlSecurity);

  BOOL_ptr isForce();

  void setForce(BOOL_ptr force);

  // @Override
  void accept0(SQLASTVisitor_ptr visitor);

  SQLObject_list_ptr getChildren();

  SQLObject_ptr clone();

  // @Override
  SQLDDLStatement::DDLObjectType getDDLObjectType();
};
